// 使用class关键字来定义一个类
/*
 *   对象中主要包含了两个部分：
 *       属性
 *       方法
 */

class Person {
	/**直接定义的属性是实例属性，需要通过对象的实例去访问
	 * 定义实例属性（new出实例之后才能访问的属性）
	 */
	readonly name: string = '张三';
	age: number = 20;

	/**定义静态属性：在属性前使用static关键字可以定义类属性（静态属性）
	 * 使用static开头的属性是静态属性（类属性），可以直接通过类去访问
	 */
	static readonly height: string = '178cm';

	/** readonly开头的属性表示一个只读的属性无法修改
	 *   */

	/**
	 * 定义方法：如果方法以static开头则方法就是类方法，可以直接通过类去调用
	 */
  // 定义实例方法
  sayName () {
    console.log(this.name);
  }

  // 定义类方法
  static showHeight () {
    console.log(Person.height);
  }
}

let person = new Person();
console.log(person);
console.log(person.name, person.age);
// person.name = '李四'; //无法分配到 "name" ，因为它是只读属性。
person.sayName();



// console.log(Person.age); //实例属性只能通过实例访问
console.log(Person.height);
// Person.height = '180cm';

Person.showHeight();

